#include <QApplication>
#include <QStyleFactory>
#include <QDir>
#include <QMessageBox>
#include "mainWindow.h"

/**
 * @brief 设置应用程序样式和主题
 * @param app Qt应用程序实例
 */
void setupApplicationStyle(QApplication& app) {
    // 设置应用程序样式为Fusion（现代化外观）
    app.setStyle(QStyleFactory::create("Fusion"));
    
    // 设置深色主题样式表
    QString darkStyleSheet = 
        "QMainWindow {"
            "background-color: #2b2b2b;"
            "color: #ffffff;"
        "}"
        
        "QTextEdit {"
            "background-color: #1e1e1e;"
            "color: #ffffff;"
            "border: 1px solid #555555;"
            "font-family: 'Consolas', 'Monaco', monospace;"
            "font-size: 10pt;"
        "}"
        
        "QTableWidget {"
            "background-color: #1e1e1e;"
            "color: #ffffff;"
            "border: 1px solid #555555;"
            "gridline-color: #555555;"
        "}"
        
        "QTableWidget::item {"
            "padding: 5px;"
        "}"
        
        "QTableWidget::item:selected {"
            "background-color: #0078d4;"
        "}"
        
        "QPushButton {"
            "background-color: #0078d4;"
            "color: white;"
            "border: none;"
            "padding: 8px 16px;"
            "border-radius: 4px;"
            "font-weight: bold;"
        "}"
        
        "QPushButton:hover {"
            "background-color: #106ebe;"
        "}"
        
        "QPushButton:pressed {"
            "background-color: #005a9e;"
        "}"
        
        "QTabWidget::pane {"
            "border: 1px solid #555555;"
            "background-color: #2b2b2b;"
        "}"
        
        "QTabBar::tab {"
            "background-color: #3c3c3c;"
            "color: #ffffff;"
            "padding: 8px 12px;"
            "margin-right: 2px;"
        "}"
        
        "QTabBar::tab:selected {"
            "background-color: #0078d4;"
        "}"
        
        "QTabBar::tab:hover {"
            "background-color: #106ebe;"
        "}"
        
        "QMenuBar {"
            "background-color: #2b2b2b;"
            "color: #ffffff;"
        "}"
        
        "QMenuBar::item:selected {"
            "background-color: #0078d4;"
        "}"
        
        "QMenu {"
            "background-color: #2b2b2b;"
            "color: #ffffff;"
            "border: 1px solid #555555;"
        "}"
        
        "QMenu::item:selected {"
            "background-color: #0078d4;"
        "}"
        
        "QStatusBar {"
            "background-color: #2b2b2b;"
            "color: #ffffff;"
            "border-top: 1px solid #555555;"
        "}"
        
        "QScrollBar:vertical {"
            "background-color: #3c3c3c;"
            "width: 12px;"
            "border-radius: 6px;"
        "}"
        
        "QScrollBar::handle:vertical {"
            "background-color: #555555;"
            "border-radius: 6px;"
            "min-height: 20px;"
        "}"
        
        "QScrollBar::handle:vertical:hover {"
            "background-color: #777777;"
        "}";
    
    app.setStyleSheet(darkStyleSheet);
}

/**
 * @brief 检查系统环境和依赖
 * @return bool 环境检查是否通过
 */
bool checkSystemEnvironment() {
    // 检查Qt版本
    if (QT_VERSION < QT_VERSION_CHECK(5, 12, 0)) {
        QMessageBox::critical(nullptr, "系统要求错误", 
            "此应用程序需要Qt 5.12.0或更高版本。\n当前Qt版本：" + QString(qVersion()));
        return false;
    }
    
    // 检查工作目录权限
    QDir currentDir = QDir::current();
    if (!currentDir.isReadable()) {
        QMessageBox::warning(nullptr, "权限警告", 
            "当前工作目录不可读，某些功能可能无法正常工作。");
    }
    
    return true;
}

/**
 * @brief 应用程序主入口函数
 * @param argc 命令行参数数量
 * @param argv 命令行参数数组
 * @return int 应用程序退出代码
 */
int main(int argc, char *argv[])
{
    // 创建Qt应用程序实例
    QApplication app(argc, argv);
    
    // 设置应用程序基本信息
    app.setApplicationName("Qt汇编程序解释器");
    app.setApplicationVersion("2.0.0");
    app.setApplicationDisplayName("Qt汇编程序解释器 - 扩展版");
    app.setOrganizationName("AssemblySimulator");
    app.setOrganizationDomain("assemblysimulator.local");
    
    // 设置应用程序图标（如果存在）
    app.setWindowIcon(QIcon(":/icons/app_icon.png"));
    
    // 检查系统环境
    if (!checkSystemEnvironment()) {
        return -1;
    }
    
    // 设置应用程序样式
    setupApplicationStyle(app);
    
    try {
        // 创建并显示主窗口
        MainWindow mainWindow;
        mainWindow.show();
        
        // 显示启动信息
        QMessageBox::information(&mainWindow, "欢迎", 
            "欢迎使用Qt汇编程序解释器 - 扩展版！\n\n"
            "本版本支持：\n"
            "• 文件系统操作（中断0x10-0x1F）\n"
            "• 输入输出处理（中断0x20-0x2F）\n"
            "• 字符串操作（中断0x30-0x3F）\n"
            "• 数学运算（中断0x40-0x4F）\n"
            "• 系统信息查询（中断0x50-0x5F）\n"
            "• 内存管理（中断0x60-0x6F）\n\n"
            "点击'加载示例'查看演示代码。");
        
        // 运行应用程序事件循环
        return app.exec();
        
    } catch (const std::exception& e) {
        // 捕获标准异常
        QMessageBox::critical(nullptr, "运行时错误", 
            QString("应用程序遇到错误：\n%1").arg(e.what()));
        return -1;
        
    } catch (...) {
        // 捕获其他所有异常
        QMessageBox::critical(nullptr, "未知错误", 
            "应用程序遇到未知错误，即将退出。");
        return -1;
    }
} 